home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xa / SchemaDoc.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  40.1 KB  |  1,652 lines

  1. package com.extensibility.xa;
  2.  
  3. import com.extensibility.app.BaseApplication;
  4. import com.extensibility.app.BaseDocument;
  5. import com.extensibility.app.BaseInfo;
  6. import com.extensibility.app.BaseWindow;
  7. import com.extensibility.app.BasicDialog;
  8. import com.extensibility.app.Desktop;
  9. import com.extensibility.app.DialogFactory;
  10. import com.extensibility.app.DocumentPreferences;
  11. import com.extensibility.app.EditWindow;
  12. import com.extensibility.app.UI;
  13. import com.extensibility.app.WindowUndoManager;
  14. import com.extensibility.plugin.api.URIVersionedAccess;
  15. import com.extensibility.util.Debug;
  16. import com.extensibility.util.FilteredEnumerator;
  17. import com.extensibility.util.XASet;
  18. import com.extensibility.xml.AttributeDeclaration;
  19. import com.extensibility.xml.AttributeGroup;
  20. import com.extensibility.xml.AttributeGroupMember;
  21. import com.extensibility.xml.AuditTrail;
  22. import com.extensibility.xml.BaseDeclaration;
  23. import com.extensibility.xml.CommentList;
  24. import com.extensibility.xml.ContentModelOwner;
  25. import com.extensibility.xml.ContentModelTerm;
  26. import com.extensibility.xml.DTDParser;
  27. import com.extensibility.xml.DTDUtilities;
  28. import com.extensibility.xml.DataTypeDeclaration;
  29. import com.extensibility.xml.DeclarationChangeEvent;
  30. import com.extensibility.xml.ElementDeclaration;
  31. import com.extensibility.xml.EntityDeclaration;
  32. import com.extensibility.xml.ExternalPEDeclaration;
  33. import com.extensibility.xml.ExternalSubset;
  34. import com.extensibility.xml.ExtraMetaDataUIIntf;
  35. import com.extensibility.xml.InternalPEDeclaration;
  36. import com.extensibility.xml.ParameterEntityDeclaration;
  37. import com.extensibility.xml.ParserException;
  38. import com.extensibility.xml.ProcessingInstruction;
  39. import com.extensibility.xml.Schema;
  40. import com.extensibility.xml.SchemaFlattened;
  41. import com.extensibility.xml.SchemaFlavorIntf;
  42. import com.extensibility.xml.SchemaIntf;
  43. import com.extensibility.xml.SchemaUtilities;
  44. import com.extensibility.xml.SchemaValidator;
  45. import com.extensibility.xml.URI;
  46. import com.extensibility.xml.dt.DataTypeIntf;
  47. import java.awt.Component;
  48. import java.awt.Dialog;
  49. import java.awt.event.ActionEvent;
  50. import java.io.File;
  51. import java.io.IOException;
  52. import java.io.Writer;
  53. import java.util.Enumeration;
  54. import java.util.Vector;
  55. import javax.swing.UIManager;
  56. import javax.swing.event.EventListenerList;
  57.  
  58. public class SchemaDoc extends BaseDocument {
  59.    public static final String XA_DOC_PREFS = "XA_DOC_PREFS";
  60.    public static final String XA_VER_HIST = "XA_VERSION_HISTORY";
  61.    ModuleRegistry moduleRegistry;
  62.    SchemaIntf schema;
  63.    boolean muteDeclChanges;
  64.    boolean parsedFromFile;
  65.    SchemaValidator validator;
  66.    Thread validatorThread;
  67.    BaseDeclaration focusedDecl;
  68.    URI focusedURI;
  69.    EventListenerList listenerList;
  70.    SchemaDocEvent documentEvent;
  71.    SchemaDocChangeListener declChangeListener;
  72.    SchemaDocListenerImpl docListener;
  73.  
  74.    public SchemaDoc() {
  75.       this(getDefaultSchemaFlavor());
  76.    }
  77.  
  78.    public SchemaDoc(String var1) {
  79.       this.muteDeclChanges = false;
  80.       this.parsedFromFile = true;
  81.       this.listenerList = new EventListenerList();
  82.       this.documentEvent = new SchemaDocEvent(this, (BaseDeclaration)null);
  83.       this.declChangeListener = new SchemaDocChangeListener(this);
  84.       this.docListener = new SchemaDocListenerImpl(this);
  85.       if (Authority.isBizTalkOnly()) {
  86.          var1 = SchemaIntf.BIZ_FLAVOR_NAME;
  87.       }
  88.  
  89.       if (var1 == null || !Schema.flavorExists(var1)) {
  90.          var1 = SchemaIntf.DTD_FLAVOR_NAME;
  91.       }
  92.  
  93.       this.schema = new Schema(((BaseDocument)this).getURI(), var1);
  94.       this.init();
  95.       super.undoManager = new WindowUndoManager(this);
  96.    }
  97.  
  98.    public SchemaDoc(SchemaIntf var1) {
  99.       super(var1.getURI());
  100.       this.muteDeclChanges = false;
  101.       this.parsedFromFile = true;
  102.       this.listenerList = new EventListenerList();
  103.       this.documentEvent = new SchemaDocEvent(this, (BaseDeclaration)null);
  104.       this.declChangeListener = new SchemaDocChangeListener(this);
  105.       this.docListener = new SchemaDocListenerImpl(this);
  106.       this.schema = var1;
  107.       this.init();
  108.       super.undoManager = new WindowUndoManager(this);
  109.    }
  110.  
  111.    public SchemaDoc(URI var1) {
  112.       super(var1);
  113.       this.muteDeclChanges = false;
  114.       this.parsedFromFile = true;
  115.       this.listenerList = new EventListenerList();
  116.       this.documentEvent = new SchemaDocEvent(this, (BaseDeclaration)null);
  117.       this.declChangeListener = new SchemaDocChangeListener(this);
  118.       this.docListener = new SchemaDocListenerImpl(this);
  119.       String var2 = SchemaUtilities.getFlavor(var1, true);
  120.       this.schema = new Schema(var1, var2 == null ? SchemaIntf.DTD_FLAVOR_NAME : var2);
  121.       this.init();
  122.       super.undoManager = new WindowUndoManager(this);
  123.    }
  124.  
  125.    public static String getDefaultSchemaFlavor() {
  126.       String var0 = ((XAPreferences)BaseApplication.getPreferences()).getDefaultSchemaFlavor();
  127.       if (Authority.isBizTalkOnly()) {
  128.          var0 = SchemaIntf.BIZ_FLAVOR_NAME;
  129.       }
  130.  
  131.       if (var0 == null || !Schema.flavorExists(var0)) {
  132.          var0 = SchemaIntf.DTD_FLAVOR_NAME;
  133.       }
  134.  
  135.       return var0;
  136.    }
  137.  
  138.    public void addDocumentListener(SchemaDocListener var1) {
  139.       this.listenerList.add(Class.forName("com.extensibility.xa.SchemaDocListener"), var1);
  140.    }
  141.  
  142.    private void addModule(Vector var1, ExternalSubset var2) {
  143.       var1.addElement(var2);
  144.       Enumeration var3 = var2.children();
  145.  
  146.       while(var3.hasMoreElements()) {
  147.          this.addModule(var1, (ExternalSubset)var3.nextElement());
  148.       }
  149.  
  150.    }
  151.  
  152.    public void addVersionInfo(URI var1, VersionInfo var2) {
  153.       ProcessingInstruction var3 = new ProcessingInstruction("XA_VERSION_HISTORY", var2.toSource());
  154.       ((BaseDeclaration)var3).setURI(var1);
  155.       this.insertDeclaration(var3, (BaseDeclaration)null);
  156.    }
  157.  
  158.    public void setParsedFromFile(boolean var1) {
  159.       this.parsedFromFile = var1;
  160.    }
  161.  
  162.    public boolean isParsedFromFile() {
  163.       return this.parsedFromFile;
  164.    }
  165.  
  166.    public void autoCreateMissingElements(ElementDeclaration var1) {
  167.       boolean var2 = this.isSupported(Class.forName("com.extensibility.xml.NamespaceDeclaration"));
  168.       if (var2) {
  169.          this.autoCreateMissingPrefixes(var1);
  170.       }
  171.  
  172.       String var3 = var1.getFirstMissingTerm(this.getSchema(), var2);
  173.       if (var3 != null && XADialogFactory.askAutoCreate((Component)null, var3)) {
  174.          boolean var4 = this.getSchema().getFlavor().getFlavorName().equals("osc");
  175.          var1.visitTerms(new 1(var2, var4, this), true);
  176.          ((BaseDeclaration)var1).fireChangeEvent(20, (Object)null);
  177.       }
  178.    }
  179.  
  180.    public void autoCreateMissingPrefixes(ElementDeclaration var1) {
  181.       boolean var2 = this.isSupported(Class.forName("com.extensibility.xml.NamespaceDeclaration"));
  182.       if (var2) {
  183.          String var3 = var1.getFirstMissingPrefix(this.getSchema());
  184.          if (var3 != null && XADialogFactory.askAutoCreatePrefix((Component)null, var3)) {
  185.             var1.visitTerms(new 2(this), true);
  186.             ((BaseDeclaration)var1).fireChangeEvent(20, (Object)null);
  187.          }
  188.       }
  189.    }
  190.  
  191.    public void checkAttrList(String var1) throws ParserException {
  192.       Vector var2 = DTDUtilities.parseNameList(var1, ',');
  193.       Enumeration var3 = var2.elements();
  194.  
  195.       while(var3.hasMoreElements()) {
  196.          String var4 = (String)var3.nextElement();
  197.          if (DTDUtilities.isPEName(var4) && this.getNamedAttributeGroup(var4) == null) {
  198.             var4 = DTDUtilities.convertPEName(var4, false);
  199.             InternalPEDeclaration var5 = (InternalPEDeclaration)this.schema.getNamedDeclaration(var4, Class.forName("com.extensibility.xml.InternalPEDeclaration"));
  200.             if (var5 == null || !var5.getMayBeAttrGroup()) {
  201.                throw new ParserException(209, var4);
  202.             }
  203.          }
  204.       }
  205.  
  206.    }
  207.  
  208.    public void checkContentModel(String var1, String var2) throws ParserException {
  209.       if (!DTDParser.isWhiteString(var2)) {
  210.          if (var2.length() != 0 && !DTDParser.isWhiteString(var2)) {
  211.             var2 = DTDUtilities.convertPEReferences(var2, true).trim();
  212.             boolean var3 = var2.equals("EMPTY") || var2.equals("ANY");
  213.             this.schema.checkContentModel(var1, var2, var3);
  214.          }
  215.       }
  216.    }
  217.  
  218.    public String getContentModelAsString(ContentModelOwner var1) {
  219.       return this.schema.getContentModelAsString(var1);
  220.    }
  221.  
  222.    public void checkAttributeGroup(String var1, String var2) throws ParserException {
  223.       this.schema.checkAttributeGroup(var1, var2);
  224.    }
  225.  
  226.    public void checkForErrors(boolean var1) {
  227.       if (var1) {
  228.          this.validator.addAll();
  229.       } else {
  230.          this.validator.checkAll();
  231.       }
  232.  
  233.    }
  234.  
  235.    public void close() {
  236.       this.validator.exit();
  237.       this.schema = null;
  238.       super.close();
  239.    }
  240.  
  241.    public boolean commitPendingEdits(boolean var1) {
  242.       Enumeration var2 = Desktop.getWindowsOfDocument(this);
  243.  
  244.       while(var2.hasMoreElements()) {
  245.          EditWindow var3 = (EditWindow)var2.nextElement();
  246.          if (!var3.commitPendingEdits(var1)) {
  247.             return false;
  248.          }
  249.       }
  250.  
  251.       return true;
  252.    }
  253.  
  254.    public int countErrors() {
  255.       int var1 = 0;
  256.       Enumeration var2 = this.schema.getDeclarations();
  257.  
  258.       while(var2.hasMoreElements()) {
  259.          BaseDeclaration var3 = (BaseDeclaration)var2.nextElement();
  260.          if (var3.hasErrors()) {
  261.             ++var1;
  262.          }
  263.       }
  264.  
  265.       return var1;
  266.    }
  267.  
  268.    public boolean updateAttributeGroup(AttributeDeclaration.Owner var1, String var2) throws ParserException {
  269.       Vector var3 = var1.getAttributeGroup().getMembers();
  270.       boolean var4 = this.getSchema().updateAttributeGroup(var1, var2);
  271.       Vector var5 = var1.getAttributeGroup().getMembers();
  272.       Enumeration var6 = var3.elements();
  273.  
  274.       while(var6.hasMoreElements()) {
  275.          Object var7 = var6.nextElement();
  276.          if (var7 instanceof AttributeDeclaration) {
  277.             this.fireRemoveEvent((AttributeDeclaration)var7);
  278.          }
  279.       }
  280.  
  281.       var6 = var5.elements();
  282.  
  283.       while(var6.hasMoreElements()) {
  284.          Object var9 = var6.nextElement();
  285.          if (var9 instanceof AttributeDeclaration) {
  286.             this.fireInsertEvent((AttributeDeclaration)var9, (BaseDeclaration)null);
  287.          }
  288.       }
  289.  
  290.       return var4;
  291.    }
  292.  
  293.    public AttributeGroup createAttributeGroup(InternalPEDeclaration var1) throws ParserException {
  294.       int var2 = this.schema.getCount();
  295.       boolean var3 = this.schema.createAttributeGroup(var1);
  296.       Debug.assert(var3, "failed without throwing parserException");
  297.       if (this.schema.getCount() != var2) {
  298.          this.fireChangedEvent((BaseDeclaration)null);
  299.       }
  300.  
  301.       return this.getNamedAttributeGroup(((BaseDeclaration)var1).getName());
  302.    }
  303.  
  304.    public void ensureURI(BaseDeclaration var1) {
  305.       if (var1.getURI() == null) {
  306.          var1.setURI(this.getFocusedURI(true));
  307.       }
  308.  
  309.    }
  310.  
  311.    public void fireChangedEvent(BaseDeclaration var1) {
  312.       Object[] var2 = this.listenerList.getListenerList();
  313.       this.documentEvent.set((BaseDeclaration)null, var1);
  314.  
  315.       for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  316.          if (var2[var3] == Class.forName("com.extensibility.xa.SchemaDocListener")) {
  317.             ((SchemaDocListener)var2[var3 + 1]).declarationListChanged(this.documentEvent);
  318.          }
  319.       }
  320.  
  321.    }
  322.  
  323.    protected void fireDeclChangedEvent(DeclarationChangeEvent var1) {
  324.       if (!this.muteDeclChanges) {
  325.          Object[] var2 = this.listenerList.getListenerList();
  326.          this.documentEvent.set(var1.getDeclaration());
  327.  
  328.          for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  329.             if (var2[var3] == Class.forName("com.extensibility.xa.SchemaDocListener")) {
  330.                ((SchemaDocListener)var2[var3 + 1]).declarationChanged(this.documentEvent, var1);
  331.             }
  332.          }
  333.  
  334.       }
  335.    }
  336.  
  337.    public void fireFlavorChangedEvent() {
  338.       Object[] var1 = this.listenerList.getListenerList();
  339.       this.documentEvent.set((BaseDeclaration)null);
  340.  
  341.       for(int var2 = var1.length - 2; var2 >= 0; var2 -= 2) {
  342.          if (var1[var2] == Class.forName("com.extensibility.xa.SchemaDocListener")) {
  343.             ((SchemaDocListener)var1[var2 + 1]).flavorChanged(this.documentEvent);
  344.          }
  345.       }
  346.  
  347.    }
  348.  
  349.    public void fireInsertEvent(BaseDeclaration var1, BaseDeclaration var2) {
  350.       Object[] var3 = this.listenerList.getListenerList();
  351.       this.documentEvent.set(var1, var2);
  352.  
  353.       for(int var4 = var3.length - 2; var4 >= 0; var4 -= 2) {
  354.          if (var3[var4] == Class.forName("com.extensibility.xa.SchemaDocListener")) {
  355.             ((SchemaDocListener)var3[var4 + 1]).declarationInserted(this.documentEvent);
  356.          }
  357.       }
  358.  
  359.    }
  360.  
  361.    public void fireRemoveEvent(BaseDeclaration var1) {
  362.       Object[] var2 = this.listenerList.getListenerList();
  363.       this.documentEvent.set(var1);
  364.  
  365.       for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  366.          if (var2[var3] == Class.forName("com.extensibility.xa.SchemaDocListener")) {
  367.             ((SchemaDocListener)var2[var3 + 1]).declarationRemoved(this.documentEvent);
  368.          }
  369.       }
  370.  
  371.    }
  372.  
  373.    protected void fireReorderedEvent(BaseDeclaration var1) {
  374.       Object[] var2 = this.listenerList.getListenerList();
  375.       this.documentEvent.set(var1, (BaseDeclaration)null);
  376.  
  377.       for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  378.          if (var2[var3] == Class.forName("com.extensibility.xa.SchemaDocListener")) {
  379.             ((SchemaDocListener)var2[var3 + 1]).declarationListReordered(this.documentEvent);
  380.          }
  381.       }
  382.  
  383.    }
  384.  
  385.    public ElementDeclaration[] getAllowedElements(ElementDeclaration var1) {
  386.       return this.schema.getAllowedElements(var1);
  387.    }
  388.  
  389.    public Enumeration getAttrGroupPENames() {
  390.       return new 3(this);
  391.    }
  392.  
  393.    public Enumeration getAttributeDeclarations() {
  394.       return new FilteredEnumerator(this.getDeclarations(), Class.forName("com.extensibility.xml.AttributeDeclaration"));
  395.    }
  396.  
  397.    public Enumeration getAttributeNames() {
  398.       XASet var1 = new XASet();
  399.       Enumeration var2 = this.getDeclarations(Class.forName("com.extensibility.xml.AttributeDeclaration"));
  400.  
  401.       while(var2.hasMoreElements()) {
  402.          AttributeDeclaration var3 = (AttributeDeclaration)var2.nextElement();
  403.          if (var3.getOwner() instanceof ElementDeclaration || var3.isGlobal()) {
  404.             var1.addToSet(((BaseDeclaration)var3).getName());
  405.          }
  406.       }
  407.  
  408.       return ((Vector)var1).elements();
  409.    }
  410.  
  411.    AuditTrail getAuditTrail(URI var1) {
  412.       return this.moduleRegistry.getAuditTrail(var1);
  413.    }
  414.  
  415.    public boolean getChangeLogging() {
  416.       URI var1 = ((BaseDocument)this).getURI();
  417.       return this.getPreferences(var1).getChangeLogging();
  418.    }
  419.  
  420.    public String getClassName() {
  421.       return "com.extensibility.xa.SchemaDoc";
  422.    }
  423.  
  424.    public CommentList getCommentList(URI var1) {
  425.       return this.schema.getCommentList(var1);
  426.    }
  427.  
  428.    public Enumeration getComments() {
  429.       return this.schema.getComments();
  430.    }
  431.  
  432.    public Enumeration getConstraintPENames() {
  433.       return new 4(this);
  434.    }
  435.  
  436.    public Enumeration getContentGroupPENames() {
  437.       return new 5(this);
  438.    }
  439.  
  440.    public int getCount() {
  441.       return this.schema.getCount();
  442.    }
  443.  
  444.    public int getCount(Class var1) {
  445.       int var2 = 0;
  446.  
  447.       for(Enumeration var3 = this.getDeclarations(var1); var3.hasMoreElements(); ++var2) {
  448.          var3.nextElement();
  449.       }
  450.  
  451.       return var2;
  452.    }
  453.  
  454.    public BaseDeclaration getDeclarationBefore(BaseDeclaration var1) {
  455.       return this.schema.getDeclarationBefore(var1);
  456.    }
  457.  
  458.    public BaseDeclaration getDeclarationAfter(BaseDeclaration var1) {
  459.       return this.schema.getDeclarationAfter(var1);
  460.    }
  461.  
  462.    public Enumeration getDeclarations() {
  463.       return this.schema.getDeclarations();
  464.    }
  465.  
  466.    public Enumeration getDeclarations(URI var1, Class var2) {
  467.       return this.schema.getDeclarations(var1, var2);
  468.    }
  469.  
  470.    public Enumeration getDeclarations(URI var1, boolean var2) {
  471.       return this.schema.getDeclarations(var1, var2);
  472.    }
  473.  
  474.    public Enumeration getDeclarations(Class var1) {
  475.       return this.schema.getDeclarations(var1);
  476.    }
  477.  
  478.    public Enumeration getDeclNames(Class var1, boolean var2) {
  479.       Enumeration var3 = this.getDeclarations(var1);
  480.       Vector var4 = new Vector();
  481.  
  482.       while(var3.hasMoreElements()) {
  483.          BaseDeclaration var5 = (BaseDeclaration)var3.nextElement();
  484.          if (var2) {
  485.             var4.addElement(var5.getName());
  486.          } else if (this.isEditable(var5.getURI())) {
  487.             var4.addElement(var5.getName());
  488.          }
  489.       }
  490.  
  491.       return var4.elements();
  492.    }
  493.  
  494.    public int getElementCount() {
  495.       return this.schema.getElementCount();
  496.    }
  497.  
  498.    public Enumeration getElementDeclarations() {
  499.       return this.schema.getElementDeclarations();
  500.    }
  501.  
  502.    public Enumeration getForeignDeclarations(Class var1) {
  503.       return this.schema.getForeignDeclarations(var1);
  504.    }
  505.  
  506.    public final BaseDeclaration getFocusedDecl() {
  507.       return this.focusedDecl;
  508.    }
  509.  
  510.    public final URI getFocusedURI(boolean var1) {
  511.       URI var2 = this.focusedURI == null ? ((BaseDocument)this).getURI() : this.focusedURI;
  512.       return !this.isEditable(var2) ? ((BaseDocument)this).getURI() : var2;
  513.    }
  514.  
  515.    public Enumeration getGeneralEntityDeclarations() {
  516.       return new FilteredEnumerator(this.getDeclarations(), Class.forName("com.extensibility.xml.GeneralEntityDeclaration"));
  517.    }
  518.  
  519.    private ProcessingInstruction getInstruction(URI var1, String var2) {
  520.       Enumeration var3 = this.getDeclarations(var1, Class.forName("com.extensibility.xml.ProcessingInstruction"));
  521.  
  522.       while(var3.hasMoreElements()) {
  523.          ProcessingInstruction var4 = (ProcessingInstruction)var3.nextElement();
  524.          if (var4.getTarget().equals(var2)) {
  525.             return var4;
  526.          }
  527.       }
  528.  
  529.       return null;
  530.    }
  531.  
  532.    private AttributeDeclaration getLikelyAttribute(String var1) {
  533.       if (DTDUtilities.isPEName(var1)) {
  534.          return null;
  535.       } else {
  536.          AttributeDeclaration var2 = this.schema.getNamedAttribute((String)null, var1);
  537.          if (var2 != null) {
  538.             return var2;
  539.          } else {
  540.             Enumeration var3 = this.getDeclarations(Class.forName("com.extensibility.xml.AttributeDeclaration"));
  541.  
  542.             while(var3.hasMoreElements()) {
  543.                var2 = (AttributeDeclaration)var3.nextElement();
  544.                if (((BaseDeclaration)var2).getName().equals(var1)) {
  545.                   return var2;
  546.                }
  547.             }
  548.  
  549.             return null;
  550.          }
  551.       }
  552.    }
  553.  
  554.    public Vector getModuleList() {
  555.       ExternalSubset var1 = this.getStructure();
  556.       Vector var2 = new Vector();
  557.       this.addModule(var2, var1);
  558.       return var2;
  559.    }
  560.  
  561.    public String getName() {
  562.       String var1 = super.getName();
  563.       if (!((BaseDocument)this).getURI().hasPersistence()) {
  564.          var1 = String.valueOf(String.valueOf(var1).concat(String.valueOf("."))).concat(String.valueOf(this.getSchema().getFlavorName()));
  565.       }
  566.  
  567.       return var1;
  568.    }
  569.  
  570.    public AttributeGroup getNamedAttributeGroup(String var1) {
  571.       var1 = DTDUtilities.convertPEName(var1, false);
  572.       ParameterEntityDeclaration var2 = (ParameterEntityDeclaration)this.schema.getNamedDeclaration(var1, Class.forName("com.extensibility.xml.ParameterEntityDeclaration"));
  573.       return var2 == null ? null : var2.getAttributeGroup();
  574.    }
  575.  
  576.    public AttributeDeclaration.Owner getNamedAttributeOwner(String var1) {
  577.       if (DTDUtilities.isPEName(var1)) {
  578.          AttributeGroup var2 = this.getNamedAttributeGroup(var1);
  579.          return var2 == null ? null : var2.getOwner();
  580.       } else {
  581.          return this.getNamedElement(var1);
  582.       }
  583.    }
  584.  
  585.    public ContentModelTerm getNamedContentModelGroup(String var1) {
  586.       var1 = DTDUtilities.convertPEName(var1, false);
  587.       ParameterEntityDeclaration var2 = (ParameterEntityDeclaration)this.schema.getNamedDeclaration(var1, Class.forName("com.extensibility.xml.ParameterEntityDeclaration"));
  588.       return var2 == null ? null : var2.getContentModel();
  589.    }
  590.  
  591.    public ContentModelOwner getNamedContentModelOwner(String var1) {
  592.       return this.schema.getNamedContentModelOwner(var1);
  593.    }
  594.  
  595.    public BaseDeclaration getNamedDeclaration(String var1, Class var2) {
  596.       return var2 == Class.forName("com.extensibility.xa.AggregateAttributeDecl") ? this.schema.getNamedDeclaration(var1, Class.forName("com.extensibility.xml.AttributeDeclaration")) : this.schema.getNamedDeclaration(var1, var2);
  597.    }
  598.  
  599.    public String getNameDefault() {
  600.       URI var1 = ((BaseDocument)this).getURI();
  601.       DocumentPreferences var2 = this.getPreferences(var1);
  602.       String var3 = var2.getNameDefault();
  603.       return var3 != null && var3 != "" ? var3 : System.getProperty("user.name");
  604.    }
  605.  
  606.    public ElementDeclaration getNamedElement(String var1) {
  607.       return this.schema.getNamedElement(var1);
  608.    }
  609.  
  610.    public BaseDeclaration getNextDecl(BaseDeclaration var1) {
  611.       int var2 = this.schema.indexOf(var1) + 1;
  612.       return var2 < this.schema.getCount() ? this.schema.getIndDeclaration(var2) : null;
  613.    }
  614.  
  615.    BaseDeclaration getNextDeclaration(BaseDeclaration var1) {
  616.       return this.schema.getNextDeclaration(var1);
  617.    }
  618.  
  619.    public Enumeration getNotationDeclarations() {
  620.       return new FilteredEnumerator(this.getDeclarations(), Class.forName("com.extensibility.xml.NotationDeclaration"));
  621.    }
  622.  
  623.    public Enumeration getParameterEntityDeclarations() {
  624.       return new FilteredEnumerator(this.getDeclarations(), Class.forName("com.extensibility.xml.ParameterEntityDeclaration"));
  625.    }
  626.  
  627.    public Vector getParseErrors() {
  628.       return this.schema.getParseErrors();
  629.    }
  630.  
  631.    public String getPendingChangeComment(BaseDeclaration var1) {
  632.       if (this.getChangeLogging()) {
  633.          AuditTrail var2 = this.getAuditTrail(var1.getURI());
  634.          return var2 == null ? null : var2.getChange(var1, UI.getString("audit.insert"), UI.getString("audit.change"), UI.getString("audit.remove"));
  635.       } else {
  636.          return null;
  637.       }
  638.    }
  639.  
  640.    public ExtraMetaDataUIIntf getExtraMetaDataUI() {
  641.       return this.getSchema().getFlavor() instanceof ExtraMetaDataUIIntf ? (ExtraMetaDataUIIntf)this.getSchema().getFlavor() : null;
  642.    }
  643.  
  644.    public DocumentPreferences getPreferences(URI var1) {
  645.       DocumentPreferences var2 = this.moduleRegistry.getPreferences(var1);
  646.       if (var2 != null) {
  647.          return var2;
  648.       } else {
  649.          ProcessingInstruction var3 = this.getInstruction(var1, "XA_DOC_PREFS");
  650.          if (var3 != null) {
  651.             var2 = DocumentPreferences.createDocumentPreferences(var3.getInstruction());
  652.          }
  653.  
  654.          if (var2 == null) {
  655.             var2 = new DocumentPreferences();
  656.          }
  657.  
  658.          this.moduleRegistry.setPreferences(var1, var2);
  659.          return var2;
  660.       }
  661.    }
  662.  
  663.    public BaseDeclaration getPrevDecl(BaseDeclaration var1) {
  664.       int var2 = this.schema.indexOf(var1) - 1;
  665.       return var2 >= 0 ? this.schema.getIndDeclaration(var2) : null;
  666.    }
  667.  
  668.    public Enumeration getProcessingInstructions() {
  669.       return new FilteredEnumerator(this.getDeclarations(), Class.forName("com.extensibility.xml.ProcessingInstruction"));
  670.    }
  671.  
  672.    public boolean getPromptForVersionInfo() {
  673.       URI var1 = ((BaseDocument)this).getURI();
  674.       return this.getPreferences(var1).getPromptForVersionInfo();
  675.    }
  676.  
  677.    public ExternalPEDeclaration getReferent(ExternalSubset var1) {
  678.       Enumeration var2 = this.getDeclarations();
  679.  
  680.       while(var2.hasMoreElements()) {
  681.          BaseDeclaration var3 = (BaseDeclaration)var2.nextElement();
  682.          if (var3 instanceof ExternalPEDeclaration && ((ExternalPEDeclaration)var3).getSystemID().equals(var1.getSystemURI())) {
  683.             return (ExternalPEDeclaration)var3;
  684.          }
  685.       }
  686.  
  687.       Debug.assert(false, "Referent not found.");
  688.       return null;
  689.    }
  690.  
  691.    public void export(String var1, URI var2) throws IOException {
  692.       Writer var3 = var2.createWriter();
  693.       SchemaUtilities.getWriter(new SchemaFlattened(this.getSchema()), var1).writeDocument(var3);
  694.       var3.close();
  695.    }
  696.  
  697.    public boolean saveAs(ActionEvent var1) {
  698.       File var2 = this.getSaveAsFile(var1);
  699.       if (var2 == null) {
  700.          return false;
  701.       } else {
  702.          URI var3 = new URI(var2);
  703.          String var4 = SchemaUtilities.getFlavor(var3, false);
  704.          Vector var5 = ((Schema)this.getSchema()).checkConversion(var4);
  705.          if (var5.size() > 0) {
  706.             CompositeSchemaWindow var6 = (CompositeSchemaWindow)Desktop.getFrontDocWindow();
  707.             BasicDialog var7 = new BasicDialog(var6, UI.getString("dialog.confirm.title"), UIManager.getIcon("OptionPane.questionIcon"), UI.getString("conversion.check.dialog.msg"), new String[0], new String[0], new String[]{UI.getString("conversion.check.dialog.view"), UI.getString("conversion.check.dialog.save"), UI.getString("dialog.cancel")});
  708.             ((Dialog)var7).show();
  709.             int var8 = var7.getDismissalButton();
  710.             if (var8 != 1) {
  711.                if (var8 == 0) {
  712.                   Debug.assert(((BaseWindow)var6).getDocument() == this);
  713.                   var6.showConversionErrors(var5, var3, var4);
  714.                }
  715.  
  716.                return false;
  717.             }
  718.          }
  719.  
  720.          this.setURI(var3);
  721.          this.touch();
  722.          this.save(var1);
  723.          return true;
  724.       }
  725.    }
  726.  
  727.    protected String[] getSaveAsExtensions() {
  728.       if (Authority.isBizTalkOnly()) {
  729.          return new String[]{SchemaIntf.BIZ_FLAVOR_NAME};
  730.       } else if (this.getModuleList().size() > 1) {
  731.          return new String[]{this.getSchema().getFlavorName()};
  732.       } else {
  733.          String[] var1 = SchemaUtilities.getExtensions();
  734.          String[] var2 = new String[var1.length];
  735.          System.arraycopy(var1, 0, var2, 0, var1.length);
  736.  
  737.          int var3;
  738.          for(var3 = 0; var3 < var2.length; ++var3) {
  739.             if (var2[var3].equals(this.schema.getFlavorName())) {
  740.                String var4 = var2[0];
  741.                var2[0] = var2[var3];
  742.                var2[var3] = var4;
  743.                break;
  744.             }
  745.          }
  746.  
  747.          Debug.assert(var3 < var2.length, String.valueOf("Unknown flavor: ").concat(String.valueOf(this.schema.getFlavorName())));
  748.          return var2;
  749.       }
  750.    }
  751.  
  752.    protected File getSaveAsFile(ActionEvent var1) {
  753.       String[] var2 = this.getSaveAsExtensions();
  754.       String var3 = UI.getString("dialog.title.save.as", UI.getFileTypeName(this.schema.getFlavorName()));
  755.       String var4 = null;
  756.       if (this.schema.getFlavorName().equals("xams")) {
  757.          var4 = XAUI.getFlavorsDirectory().getPath();
  758.       }
  759.  
  760.       File var5 = DialogFactory.askNewFile(Desktop.getDialogParent(var1), var2, var3, var4);
  761.       if (var5 != null && Authority.isBizTalkOnly()) {
  762.          String var6 = var5.getPath().substring(var5.getPath().lastIndexOf(46) + 1);
  763.          if (!SchemaUtilities.compatibleFlavor(this.getSchema().getFlavor(), new URI(var5), false)) {
  764.             DialogFactory.stop(Desktop.getDialogParent(var1), UI.getString("stop.only.biztalk"));
  765.             var5 = this.getSaveAsFile(var1);
  766.          }
  767.       }
  768.  
  769.       if (var5 != null && this.getModuleList().size() > 1) {
  770.          String var7 = var5.getPath().substring(var5.getPath().lastIndexOf(46) + 1);
  771.          if (!SchemaUtilities.compatibleFlavor(this.getSchema().getFlavor(), new URI(var5), false)) {
  772.             DialogFactory.stop(Desktop.getDialogParent(var1), UI.getString("stop.only.same.flavor"));
  773.             var5 = this.getSaveAsFile(var1);
  774.          }
  775.       }
  776.  
  777.       return var5;
  778.    }
  779.  
  780.    protected String[] getSaveChangesName() {
  781.       Vector var1 = this.moduleRegistry.getTouchedURIs();
  782.       String[] var2 = new String[var1.size()];
  783.  
  784.       for(int var3 = 0; var3 < var1.size(); ++var3) {
  785.          URI var4 = (URI)var1.elementAt(var3);
  786.          var2[var3] = var4.equals(((BaseDocument)this).getURI()) ? this.getName() : var4.getShortName();
  787.       }
  788.  
  789.       return var2;
  790.    }
  791.  
  792.    public SchemaIntf getSchema() {
  793.       return this.schema;
  794.    }
  795.  
  796.    public ExternalSubset getStructure() {
  797.       return this.schema.getStructure();
  798.    }
  799.  
  800.    public ExternalSubset getSubset(URI var1) {
  801.       return this.getStructure().findParent(var1);
  802.    }
  803.  
  804.    public Enumeration getTextPENames() {
  805.       return !this.isSupported(Class.forName("com.extensibility.xml.InternalPEDeclaration")) ? null : new 6(this);
  806.    }
  807.  
  808.    public String getUniqueAttrName(AttributeDeclaration var1) {
  809.       String var2 = new String(((BaseDeclaration)var1).getName());
  810.       if (this.getNamedDeclaration(var2, Class.forName("com.extensibility.xml.AttributeDeclaration")) == null) {
  811.          return var2;
  812.       } else {
  813.          int var3 = 1;
  814.          String var4 = var2;
  815.          boolean var5 = true;
  816.  
  817.          do {
  818.             String var6 = new String(var4);
  819.             AttributeDeclaration.Owner var7 = var1.getOwner();
  820.             FilteredEnumerator var8 = new FilteredEnumerator(this.getDeclarations(Class.forName("com.extensibility.xml.AttributeDeclaration")), new 7(var6, var7, (SchemaDoc)null));
  821.             if (var8.hasMoreElements()) {
  822.                var4 = String.valueOf(String.valueOf(var2).concat(String.valueOf("."))).concat(String.valueOf(var3++));
  823.             } else {
  824.                var5 = false;
  825.             }
  826.          } while(var5);
  827.  
  828.          return var4;
  829.       }
  830.    }
  831.  
  832.    public String getUniqueName(String var1, Class var2) {
  833.       if (var2 == Class.forName("com.extensibility.xml.AttributeDeclaration")) {
  834.          return var1;
  835.       } else if (this.getNamedDeclaration(var1, var2) == null) {
  836.          return var1;
  837.       } else {
  838.          int var3 = 1;
  839.  
  840.          String var4;
  841.          do {
  842.             var4 = String.valueOf(String.valueOf(var1).concat(String.valueOf("."))).concat(String.valueOf(var3++));
  843.          } while(this.getNamedDeclaration(var4, var2) != null);
  844.  
  845.          return var4;
  846.       }
  847.    }
  848.  
  849.    public Enumeration getUsedBy(BaseDeclaration var1) {
  850.       return (new Vector()).elements();
  851.    }
  852.  
  853.    public Enumeration getUsedBy(ElementDeclaration var1) {
  854.       String var2 = ((BaseDeclaration)var1).getName();
  855.       return new FilteredEnumerator(this.getDeclarations(), new 8(var2, (SchemaDoc)null));
  856.    }
  857.  
  858.    public Enumeration getUsedBy(InternalPEDeclaration var1) {
  859.       return new FilteredEnumerator(this.getDeclarations(), new 9(var1, (SchemaDoc)null));
  860.    }
  861.  
  862.    public String getVersionInfoAsString(URI var1) {
  863.       StringBuffer var2 = new StringBuffer();
  864.       Enumeration var3 = this.getDeclarations(var1, Class.forName("com.extensibility.xml.ProcessingInstruction"));
  865.  
  866.       while(var3.hasMoreElements()) {
  867.          ProcessingInstruction var4 = (ProcessingInstruction)var3.nextElement();
  868.          if (var4.getTarget().equals("XA_VERSION_HISTORY")) {
  869.             VersionInfo var5 = VersionInfo.createVersionInfo(var4.getInstruction());
  870.             if (var5 != null) {
  871.                var2.append(var5.toString());
  872.                var2.append(VersionInfo.SEPARATOR);
  873.             }
  874.          }
  875.       }
  876.  
  877.       return var2.toString();
  878.    }
  879.  
  880.    public BaseDeclaration importURI(URI var1, BaseDeclaration var2, SchemaFlavorIntf var3) throws Exception {
  881.       int var4 = this.getCount();
  882.       int var5 = var2 == null ? var4 : this.schema.indexOf(var2);
  883.       if (var3 == null) {
  884.          var3 = this.schema.getFlavor();
  885.       }
  886.  
  887.       var3.parse(var1, var1, var5, (Object)null);
  888.       ExternalSubset var6 = this.getSubset(var1);
  889.       if (var6 != null) {
  890.          this.setupRegistry(var6);
  891.       }
  892.  
  893.       this.updateURI(var1, ((BaseDocument)this).getURI());
  894.       if (this.getCount() == var4) {
  895.          return null;
  896.       } else {
  897.          BaseDeclaration var7 = this.schema.getIndDeclaration(var5);
  898.          if (this.getCount() == var4 + 1) {
  899.             this.fireInsertEvent(var7, var2);
  900.          } else {
  901.             this.fireChangedEvent(var7);
  902.          }
  903.  
  904.          return var7;
  905.       }
  906.    }
  907.  
  908.    private void init() {
  909.       if (this.schema.getFlavorName().equals(SchemaIntf.SOX2_FLAVOR_NAME)) {
  910.          BaseApplication.getApplication();
  911.          String var1 = BaseApplication.getPreferences().getSchemaPath();
  912.          BaseApplication.getApplication();
  913.          String var2 = (new File(BaseApplication.getHomePath(), "sox")).getAbsolutePath();
  914.          if (var1 == null) {
  915.             this.schema.setSchemaPath(var2);
  916.          } else {
  917.             var1 = String.valueOf(String.valueOf(var1).concat(String.valueOf(System.getProperty("path.separator")))).concat(String.valueOf(var2));
  918.             this.schema.setSchemaPath(var1);
  919.          }
  920.       }
  921.  
  922.       URI var4 = ((BaseDocument)this).getURI();
  923.       this.moduleRegistry = new ModuleRegistry();
  924.       this.moduleRegistry.addModule(var4);
  925.       this.moduleRegistry.setEditable(var4, !var4.isReadOnly(true) || !var4.hasPersistence());
  926.       this.validator = new SchemaValidator(this.schema);
  927.       this.validatorThread = new Thread(this.validator, String.valueOf("validator for ").concat(String.valueOf(this.getName())));
  928.       this.validatorThread.start();
  929.       this.addDocumentListener(this.docListener);
  930.       this.schema.setModuleURIResolver(new 10(this));
  931.       this.fireChangedEvent((BaseDeclaration)null);
  932.    }
  933.  
  934.    public void insertDeclaration(AttributeDeclaration var1, BaseDeclaration var2, AttributeDeclaration.Owner var3) {
  935.       this.ensureURI(var1);
  936.       if (!this.schema.isValidPosition(var1, var2)) {
  937.          DialogFactory.stop((Component)null, UI.getString("stop.bad.insert.pos"));
  938.       } else {
  939.          this.schema.insertDeclaration(var1, var2, var3);
  940.          this.touch((BaseDeclaration)var1);
  941.          this.fireInsertEvent(var1, var2);
  942.       }
  943.    }
  944.  
  945.    public void insertDeclaration(BaseDeclaration var1, BaseDeclaration var2) {
  946.       this.ensureURI(var1);
  947.       if (var1 instanceof AggregateAttributeDecl) {
  948.          this.insertDeclarationAgg((AggregateAttributeDecl)var1, var2);
  949.       } else if (!this.schema.isValidPosition(var1, var2)) {
  950.          DialogFactory.stop((Component)null, UI.getString("stop.bad.insert.pos"));
  951.       } else {
  952.          this.schema.insertDeclaration(var1, var2);
  953.          this.touch(var1);
  954.          Debug.assert(!(var1 instanceof ExternalSubset), "ExternalSubsets should be inserted in a different method.");
  955.          this.fireInsertEvent(var1, var2);
  956.       }
  957.    }
  958.  
  959.    public BaseDeclaration insertDeclaration(BaseDeclaration var1, BaseDeclaration var2, Boolean var3, Boolean var4, SchemaDoc var5) throws Exception {
  960.       Object var6 = null;
  961.       String var14;
  962.       if (var1 instanceof AttributeDeclaration) {
  963.          var14 = this.getUniqueAttrName((AttributeDeclaration)var1);
  964.       } else {
  965.          var14 = this.getUniqueName(var1.getName(), var1.getClass());
  966.       }
  967.  
  968.       boolean var7 = var14.equals(var1.getName());
  969.       Vector var8 = var1.getPrerequisites(var5.getSchema());
  970.  
  971.       for(int var9 = 0; var9 < var8.size(); ++var9) {
  972.          BaseDeclaration var10 = (BaseDeclaration)var8.elementAt(var9);
  973.          if (this.getNamedDeclaration(var10.getName(), var10.getClass()) == null) {
  974.             if (var10.getURI().equals(var1.getURI())) {
  975.                if (var3 != null && var3 || XADialogFactory.askImportDecl(var1, var10)) {
  976.                   this.insertDeclaration(var10, var2, var3, var4, var5);
  977.                }
  978.             } else if (var4 != null && var4 || XADialogFactory.askImportSubset(var1, var10)) {
  979.                this.insertDeclaration(var5.getSubset(var10.getURI()), (BaseDeclaration)null, var3, var4, var5);
  980.             }
  981.          }
  982.       }
  983.  
  984.       BaseDeclaration var15 = var1.clone(var5.getSchema(), this.getSchema(), ((BaseDocument)this).getURI());
  985.       this.insertDeclaration(var15, var2, var14);
  986.       if (var1 instanceof AttributeDeclaration.Owner) {
  987.          Enumeration var11 = ((AttributeDeclaration.Owner)var1).getOwnedAttributes();
  988.  
  989.          while(var11.hasMoreElements()) {
  990.             AttributeDeclaration var12 = (AttributeDeclaration)var11.nextElement();
  991.             AttributeDeclaration var13 = (AttributeDeclaration)this.insertDeclaration(var12, var2, var3, var4, var5);
  992.             if (!var7) {
  993.                this.setDeclarationOwner(var13, var14);
  994.             }
  995.          }
  996.       }
  997.  
  998.       if (var15 == null) {
  999.          return null;
  1000.       } else {
  1001.          if (!var7) {
  1002.             this.schema.setDeclarationName(var15, var14, false);
  1003.          }
  1004.  
  1005.          this.touch(var15);
  1006.          return var15;
  1007.       }
  1008.    }
  1009.  
  1010.    public void insertDeclaration(BaseDeclaration var1, BaseDeclaration var2, String var3) {
  1011.       this.ensureURI(var1);
  1012.       if (!this.schema.isValidPosition(var1, var2)) {
  1013.          DialogFactory.stop((Component)null, UI.getString("stop.bad.insert.pos"));
  1014.       } else {
  1015.          this.schema.insertDeclaration(var1, var2, var3);
  1016.          this.fireInsertEvent(var1, var2);
  1017.       }
  1018.    }
  1019.  
  1020.    private void insertDeclarationAgg(AggregateAttributeDecl var1, BaseDeclaration var2) {
  1021.       Debug.assert(var2 == null, "beforeDecl not appropriate for aggAttr.");
  1022.       Enumeration var3 = var1.getAttributes();
  1023.       AttributeDeclaration var4 = null;
  1024.  
  1025.       while(var3.hasMoreElements()) {
  1026.          AttributeDeclaration var5 = (AttributeDeclaration)var3.nextElement();
  1027.          if (!this.schema.isValidPosition(var5, var2)) {
  1028.             DialogFactory.stop((Component)null, UI.getString("stop.bad.insert.pos"));
  1029.             return;
  1030.          }
  1031.  
  1032.          var4 = var4 == null ? var5 : null;
  1033.          if (this.schema.indexOf(var5) == -1) {
  1034.             this.schema.insertDeclaration(var5, (BaseDeclaration)null);
  1035.          } else {
  1036.             var4 = null;
  1037.          }
  1038.       }
  1039.  
  1040.       if (var4 != null) {
  1041.          this.fireInsertEvent(var4, (BaseDeclaration)null);
  1042.       } else {
  1043.          this.fireChangedEvent(var4);
  1044.       }
  1045.  
  1046.    }
  1047.  
  1048.    public int insertSubset(ExternalPEDeclaration var1) throws IOException {
  1049.       try {
  1050.          int var2 = this.schema.insertSubset(var1);
  1051.          this.fireChangedEvent(var1);
  1052.          return var2;
  1053.       } catch (IOException var4) {
  1054.          this.fireChangedEvent(var1);
  1055.          throw var4;
  1056.       }
  1057.    }
  1058.  
  1059.    public final boolean isEditable(BaseDeclaration var1) {
  1060.       return this.isEditable(var1.getURI());
  1061.    }
  1062.  
  1063.    public final boolean isEditable(URI var1) {
  1064.       return var1 == null ? true : this.moduleRegistry.isEditable(var1);
  1065.    }
  1066.  
  1067.    public boolean isEmpty() {
  1068.       if (this.getCount() == 0) {
  1069.          return true;
  1070.       } else if (this.getCount() > 1) {
  1071.          return false;
  1072.       } else {
  1073.          BaseDeclaration var1 = (BaseDeclaration)this.getDeclarations().nextElement();
  1074.          if (!(var1 instanceof ProcessingInstruction)) {
  1075.             return false;
  1076.          } else {
  1077.             return ((ProcessingInstruction)var1).getTarget().equals("xml");
  1078.          }
  1079.       }
  1080.    }
  1081.  
  1082.    public boolean isTouched() {
  1083.       return this.moduleRegistry.isTouched();
  1084.    }
  1085.  
  1086.    public final boolean isTouched(URI var1) {
  1087.       return this.moduleRegistry.isTouched(var1);
  1088.    }
  1089.  
  1090.    public boolean lockModule(URI var1, int var2) {
  1091.       if (!this.commitPendingEdits(true)) {
  1092.          return false;
  1093.       } else if (!this.isTouched(var1)) {
  1094.          this.setEditable(var1, false);
  1095.          return true;
  1096.       } else {
  1097.          if (var2 == -1) {
  1098.             var2 = DialogFactory.saveChanges((Component)null, new String[]{var1.getShortName()});
  1099.          }
  1100.  
  1101.          if (var2 == 2) {
  1102.             return false;
  1103.          } else if (var2 == 0) {
  1104.             if (this.save((ActionEvent)null, var1)) {
  1105.                var1 = ((BaseDocument)this).getURI();
  1106.                this.moduleRegistry.setTouched(var1, false);
  1107.                this.setEditable(var1, false);
  1108.                return true;
  1109.             } else {
  1110.                return false;
  1111.             }
  1112.          } else if (var2 == 1) {
  1113.             if (this.refreshModule(var1)) {
  1114.                this.setTouched(var1, false);
  1115.                this.setEditable(var1, false);
  1116.                return true;
  1117.             } else {
  1118.                DialogFactory.stop((Component)null, "Unable to reload module");
  1119.                return false;
  1120.             }
  1121.          } else {
  1122.             return false;
  1123.          }
  1124.       }
  1125.    }
  1126.  
  1127.    void moveDeclaration(BaseDeclaration var1, BaseDeclaration var2) {
  1128.       this.touch(var1);
  1129.       this.schema.moveDeclaration(var1, var2);
  1130.       this.touch(var1);
  1131.       this.fireReorderedEvent(var1);
  1132.    }
  1133.  
  1134.    private void parse(URI var1, boolean var2) throws Exception {
  1135.       this.validatorThread.suspend();
  1136.       this.schema.parse(var1, this.schema.getCount(), new Boolean(var2));
  1137.       this.setupRegistry(this.getStructure());
  1138.       this.validatorThread.resume();
  1139.    }
  1140.  
  1141.    public void parse(boolean var1) throws Exception {
  1142.       Debug.assert(this.schema.getCount() == 0, "parse should only be used when schema is empty");
  1143.       this.parse(((BaseDocument)this).getURI(), var1);
  1144.       this.fireChangedEvent((BaseDeclaration)null);
  1145.    }
  1146.  
  1147.    boolean refreshModule(URI var1) {
  1148.       ExternalSubset var2 = this.getSubset(var1);
  1149.       if (var2 == null) {
  1150.          return false;
  1151.       } else if (!var1.equals(((BaseDocument)this).getURI())) {
  1152.          ExternalPEDeclaration var3 = (ExternalPEDeclaration)this.getNamedDeclaration(((BaseDeclaration)var2).getName(), Class.forName("com.extensibility.xml.ExternalPEDeclaration"));
  1153.          Debug.assert(var3 != null, String.valueOf("external pe ref not found for subset: ").concat(String.valueOf(((BaseDeclaration)var2).getName())));
  1154.          if (var3 == null) {
  1155.             return false;
  1156.          } else {
  1157.             this.removeSubset(var2);
  1158.  
  1159.             try {
  1160.                this.insertSubset(var3);
  1161.             } catch (IOException var5) {
  1162.                DialogFactory.caution((Component)null, UI.getString("caution.uri.update.error", ((Throwable)var5).toString()));
  1163.             }
  1164.  
  1165.             return true;
  1166.          }
  1167.       } else {
  1168.          return false;
  1169.       }
  1170.    }
  1171.  
  1172.    public void removeDeclaration(BaseDeclaration var1) {
  1173.       this.touch(var1);
  1174.       if (!(var1 instanceof AggregateAttributeDecl)) {
  1175.          this.schema.removeDeclaration(var1);
  1176.          this.fireRemoveEvent(var1);
  1177.       } else {
  1178.          AggregateAttributeDecl var2 = (AggregateAttributeDecl)var1;
  1179.          Enumeration var3 = var2.getAttributes();
  1180.  
  1181.          while(var3.hasMoreElements()) {
  1182.             this.removeDeclaration((BaseDeclaration)var3.nextElement());
  1183.          }
  1184.  
  1185.       }
  1186.    }
  1187.  
  1188.    public void removeDocumentListener(SchemaDocListener var1) {
  1189.       this.listenerList.remove(Class.forName("com.extensibility.xa.SchemaDocListener"), var1);
  1190.    }
  1191.  
  1192.    public void removeSubset(ExternalSubset var1) {
  1193.       this.schema.removeSubset(var1);
  1194.       this.fireChangedEvent(var1);
  1195.    }
  1196.  
  1197.    public void reparse(URI var1, String var2) throws Exception {
  1198.       URI var3 = URI.makeStringURI(var2);
  1199.       var3 = var3.makeRelative(var1);
  1200.       if (var1.equals(((BaseDocument)this).getURI())) {
  1201.          this.schema.clearAllParseErrors();
  1202.          this.schema.removeAllDeclarations();
  1203.          this.schema.getFlavor().parse(var3, var1, this.schema.getCount(), new Boolean(false));
  1204.          this.schema.doSecondPassValidation(var3);
  1205.          this.setupRegistry(this.getSubset(var1));
  1206.       } else {
  1207.          ExternalSubset var4 = this.getSubset(var1);
  1208.          ExternalPEDeclaration var5 = (ExternalPEDeclaration)this.getNamedDeclaration(((BaseDeclaration)var4).getName(), Class.forName("com.extensibility.xml.ExternalPEDeclaration"));
  1209.          this.schema.removeSubset(var4);
  1210.          ((EntityDeclaration)var5).setSystemID(var3);
  1211.          this.schema.insertSubset(var5);
  1212.          ((EntityDeclaration)var5).setSystemID(var1);
  1213.          var4 = this.getSubset(var3);
  1214.          var4.setSystemURI(var1);
  1215.          this.updateURI(var3, var1);
  1216.          this.setupRegistry(var4);
  1217.       }
  1218.  
  1219.       this.moduleRegistry.setPreferences(var1, (DocumentPreferences)null);
  1220.       this.fireChangedEvent((BaseDeclaration)null);
  1221.    }
  1222.  
  1223.    public boolean save(ActionEvent var1) {
  1224.       if (!((BaseDocument)this).isReadOnly() && !((BaseDocument)this).getURI().isEmpty()) {
  1225.          if (Authority.isBizTalkOnly() && !this.getSchema().getFlavorName().equals(SchemaIntf.BIZ_FLAVOR_NAME)) {
  1226.             return this.saveAs(var1);
  1227.          } else {
  1228.             Vector var2 = this.moduleRegistry.getTouchedURIs();
  1229.  
  1230.             for(int var3 = 0; var3 < var2.size(); ++var3) {
  1231.                URI var4 = (URI)var2.elementAt(var3);
  1232.                if (this.getPromptForVersionInfo()) {
  1233.                   BaseWindow var5 = (BaseWindow)Desktop.getWindowsOfDocument(this).nextElement();
  1234.                   VersionInfoDialog var6 = new VersionInfoDialog(var5, this.getNameDefault(), "");
  1235.                   ((Dialog)var6).show();
  1236.                   if (var6.getVersionInfo() != null) {
  1237.                      this.addVersionInfo(var4, var6.getVersionInfo());
  1238.                   }
  1239.                }
  1240.  
  1241.                if (this.getChangeLogging()) {
  1242.                   this.getAuditTrail(var4).logChanges(this.getDeclarations(var4, true), UI.getString("audit.insert"), UI.getString("audit.change"), UI.getString("audit.remove"));
  1243.                }
  1244.  
  1245.                this.save(var1, var4);
  1246.                boolean var7 = false;
  1247.                if (false) {
  1248.                   return false;
  1249.                }
  1250.  
  1251.                this.getAuditTrail(var4).setup(this.schema.getDeclarations(var4, true));
  1252.             }
  1253.  
  1254.             return true;
  1255.          }
  1256.       } else {
  1257.          return this.saveAs(var1);
  1258.       }
  1259.    }
  1260.  
  1261.    public boolean save(ActionEvent var1, URI var2) {
  1262.       if (!this.isTouched(var2)) {
  1263.          return true;
  1264.       } else if (var2.isEmpty()) {
  1265.          return this.saveAs(var1);
  1266.       } else if (var2.isReadOnly()) {
  1267.          DialogFactory.stop(Desktop.getDialogParent(var1), UI.getString("stop.uri.is.ro", var2.toSource()));
  1268.          return this.saveAs(var1);
  1269.       } else {
  1270.          try {
  1271.             Writer var3 = var2.createWriter();
  1272.             this.write(var3, var2);
  1273.             var3.close();
  1274.          } catch (Exception var5) {
  1275.             DialogFactory.showException((Component)null, 103, var5, var2.getShortName());
  1276.             boolean var4 = false;
  1277.             return var4;
  1278.          }
  1279.  
  1280.          this.setTouched(var2, false);
  1281.          BaseApplication.getApplication().saveNotify(var2, this);
  1282.          this.schema.clearAllParseErrors();
  1283.          if (this.schema.getFlavorName().equals("xams")) {
  1284.             ((Authority)BaseApplication.getApplication()).addFlavors();
  1285.          }
  1286.  
  1287.          return true;
  1288.       }
  1289.    }
  1290.  
  1291.    public void saveNotify(URI var1) {
  1292.       if (!var1.equals(((BaseDocument)this).getURI())) {
  1293.          this.refreshModule(var1);
  1294.       }
  1295.    }
  1296.  
  1297.    public void setChangeLogging(boolean var1) {
  1298.       URI var2 = ((BaseDocument)this).getURI();
  1299.       DocumentPreferences var3 = this.getPreferences(var2);
  1300.       var3.setChangeLogging(var1);
  1301.       this.updatePreferences(var2, var3);
  1302.    }
  1303.  
  1304.    public void setComments(URI var1, Vector var2, String var3) {
  1305.       CommentList var4 = this.getCommentList(var1);
  1306.       if (var4 == null) {
  1307.          this.schema.setComments(var1, var2);
  1308.       } else {
  1309.          var4.updateComments(var2, var3);
  1310.       }
  1311.  
  1312.       this.fireChangedEvent((BaseDeclaration)null);
  1313.    }
  1314.  
  1315.    public void setDeclarationName(BaseDeclaration var1, String var2) {
  1316.       this.touch(var1);
  1317.       String var3 = var1.getName();
  1318.       this.schema.setDeclarationName(var1, var2, true);
  1319.       var1.fireChangeEvent(1, var3);
  1320.       if (var1 instanceof ExternalPEDeclaration) {
  1321.          ExternalSubset var4 = (ExternalSubset)this.getNamedDeclaration(var2, Class.forName("com.extensibility.xml.ExternalSubset"));
  1322.          if (var4 != null) {
  1323.             ((BaseDeclaration)var4).fireChangeEvent(1, var3);
  1324.          }
  1325.       }
  1326.  
  1327.    }
  1328.  
  1329.    public void setDeclarationOwner(AggregateAttributeDecl var1, String var2) {
  1330.       Enumeration var3 = var1.getAttributes();
  1331.  
  1332.       while(var3.hasMoreElements()) {
  1333.          AttributeDeclaration var4 = (AttributeDeclaration)var3.nextElement();
  1334.          this.setDeclarationOwner(var4, var2);
  1335.       }
  1336.  
  1337.    }
  1338.  
  1339.    public void setDeclarationOwner(AttributeDeclaration var1, AttributeDeclaration.Owner var2) {
  1340.       this.touch((BaseDeclaration)var1);
  1341.       AttributeDeclaration.Owner var3 = var1.getOwner();
  1342.       this.schema.setDeclarationOwner(var1, var2);
  1343.       this.fireReorderedEvent(var1);
  1344.    }
  1345.  
  1346.    public void setDeclarationOwner(AttributeDeclaration var1, String var2) {
  1347.       AttributeDeclaration.Owner var3 = this.getNamedAttributeOwner(var2);
  1348.       if (var3 != null) {
  1349.          this.setDeclarationOwner(var1, var3);
  1350.       } else {
  1351.          this.touch((BaseDeclaration)var1);
  1352.          this.schema.setDeclarationOwner(var1, var2);
  1353.          this.fireReorderedEvent(var1);
  1354.       }
  1355.    }
  1356.  
  1357.    public void setDeclarationURI(BaseDeclaration var1, URI var2, BaseDeclaration var3) {
  1358.       if (var1 instanceof ExternalPEDeclaration) {
  1359.          ExternalPEDeclaration var4 = (ExternalPEDeclaration)var1;
  1360.          if (var2.equals(((EntityDeclaration)var4).getSystemID())) {
  1361.             DialogFactory.stop((Component)null, UI.getString("stop.move.xped.to.xs"));
  1362.             return;
  1363.          }
  1364.       }
  1365.  
  1366.       var1.setURI(var2);
  1367.       this.moveDeclaration(var1, var3);
  1368.    }
  1369.  
  1370.    private void setEditable(URI var1, boolean var2) {
  1371.       Debug.assert(var2 || !this.isTouched(var1), "unable to turn editability off.");
  1372.       this.moduleRegistry.setEditable(var1, var2);
  1373.    }
  1374.  
  1375.    public void setFocusedDecl(BaseDeclaration var1) {
  1376.       if (var1 != null) {
  1377.          this.focusedURI = var1.getURI();
  1378.       }
  1379.  
  1380.       this.focusedDecl = var1;
  1381.    }
  1382.  
  1383.    public boolean isSupported(String var1) {
  1384.       return this.schema.isSupported(var1);
  1385.    }
  1386.  
  1387.    public boolean isSupported(Class var1) {
  1388.       return this.schema.isSupported(var1);
  1389.    }
  1390.  
  1391.    public DataTypeDeclaration getNamedDataType(String var1) {
  1392.       return this.schema.getNamedDataType(var1);
  1393.    }
  1394.  
  1395.    public DataTypeIntf getNamedDataTypeIntf(String var1) {
  1396.       return this.schema.getNamedDataTypeIntf(var1);
  1397.    }
  1398.  
  1399.    public void setMuteDeclChanges(boolean var1) {
  1400.       this.muteDeclChanges = var1;
  1401.    }
  1402.  
  1403.    public void setNameDefault(String var1) {
  1404.       URI var2 = ((BaseDocument)this).getURI();
  1405.       DocumentPreferences var3 = this.getPreferences(var2);
  1406.       var3.setNameDefault(var1);
  1407.       this.updatePreferences(var2, var3);
  1408.    }
  1409.  
  1410.    public void setPromptForVersionInfo(boolean var1) {
  1411.       URI var2 = ((BaseDocument)this).getURI();
  1412.       DocumentPreferences var3 = this.getPreferences(var2);
  1413.       var3.setPromptForVersionInfo(var1);
  1414.       this.updatePreferences(var2, var3);
  1415.    }
  1416.  
  1417.    public void setTouched(URI var1, boolean var2) {
  1418.       if (var2) {
  1419.          this.touch(var1);
  1420.       } else {
  1421.          this.moduleRegistry.setTouched(var1, var2);
  1422.       }
  1423.  
  1424.    }
  1425.  
  1426.    private void setupRegistry(ExternalSubset var1) {
  1427.       URI var2 = var1.getSystemURI();
  1428.       this.moduleRegistry.setup(var2, this.getDeclarations(var2, true));
  1429.       Enumeration var3 = var1.children();
  1430.  
  1431.       while(var3.hasMoreElements()) {
  1432.          this.setupRegistry((ExternalSubset)var3.nextElement());
  1433.       }
  1434.  
  1435.    }
  1436.  
  1437.    public void setURI(URI var1) {
  1438.       String var2 = var1.getShortName().substring(var1.getShortName().lastIndexOf(46) + 1);
  1439.       if (!SchemaUtilities.sameFlavor(this.getSchema().getFlavor(), var1, false)) {
  1440.          boolean var3 = this.schema.setFlavor(var2);
  1441.          if (var3) {
  1442.             this.fireFlavorChangedEvent();
  1443.          }
  1444.       }
  1445.  
  1446.       URI var6 = ((BaseDocument)this).getURI();
  1447.       this.updateURI(var6, var1);
  1448.       super.setURI(var1);
  1449.       Enumeration var4 = Desktop.getWindowsOfDocument(this);
  1450.  
  1451.       while(var4.hasMoreElements()) {
  1452.          BaseWindow var5 = (BaseWindow)var4.nextElement();
  1453.          if (var5 instanceof SchemaWin) {
  1454.             ((SchemaWin)var5).uriUpdateNotify(var6, var1);
  1455.          }
  1456.       }
  1457.  
  1458.    }
  1459.  
  1460.    public void touch() {
  1461.       super.touch();
  1462.       this.touch(((BaseDocument)this).getURI());
  1463.    }
  1464.  
  1465.    public void touch(BaseDeclaration var1) {
  1466.       this.moduleRegistry.touch(var1.getURI());
  1467.       super.touch();
  1468.    }
  1469.  
  1470.    public void touch(URI var1) {
  1471.       this.moduleRegistry.touch(var1);
  1472.       super.touch();
  1473.    }
  1474.  
  1475.    public boolean unlockModule(URI var1) {
  1476.       Enumeration var2 = Desktop.getDocuments();
  1477.  
  1478.       while(var2.hasMoreElements()) {
  1479.          BaseDocument var3 = (BaseDocument)var2.nextElement();
  1480.          if (var3 instanceof SchemaDoc && var3 != this && ((SchemaDoc)var3).isEditable(var1)) {
  1481.             DialogFactory.stop((Component)null, UI.getString("stop.editing.uri.elsewhere", var1.getShortName()));
  1482.             return false;
  1483.          }
  1484.       }
  1485.  
  1486.       this.setEditable(var1, true);
  1487.       return true;
  1488.    }
  1489.  
  1490.    public void updateAttributeList(AttributeDeclaration.Owner var1, String var2) throws ParserException {
  1491.       Vector var3;
  1492.       if (var2.indexOf(",") >= 0) {
  1493.          var3 = DTDUtilities.parseNameList(var2, ',');
  1494.       } else if (var2.indexOf("|") > 0) {
  1495.          var3 = DTDUtilities.parseNameList(var2, '|');
  1496.       } else {
  1497.          var3 = DTDUtilities.parseNameList(var2, ' ');
  1498.       }
  1499.  
  1500.       Vector var4 = new Vector();
  1501.  
  1502.       for(int var5 = 0; var5 < var3.size(); ++var5) {
  1503.          String var6 = (String)var3.elementAt(var5);
  1504.          Object var7 = var1.getAttributeOrGroup(var6);
  1505.          if (var7 == null && DTDUtilities.isPEName(var6)) {
  1506.             var7 = this.getNamedAttributeGroup(var6);
  1507.             if (var7 == null) {
  1508.                var6 = DTDUtilities.convertPEName(var6, false);
  1509.                InternalPEDeclaration var8 = (InternalPEDeclaration)this.schema.getNamedDeclaration(var6, Class.forName("com.extensibility.xml.InternalPEDeclaration"));
  1510.                Debug.assert(var8 != null && var8.getMayBeAttrGroup(), "inelligible pe... should have been caught by cell validation");
  1511.                var7 = this.createAttributeGroup(var8);
  1512.                var1.add((AttributeGroupMember)var7);
  1513.                Debug.assert(var7 != null, "should have either made it or thrown an exception before now");
  1514.             }
  1515.          }
  1516.  
  1517.          if (var7 == null) {
  1518.             var7 = this.getLikelyAttribute(var6);
  1519.             if (var7 == null && this.isSupported("GESTALT_FORBID_LOCAL_ATTRS")) {
  1520.                AttributeDeclaration var11 = new AttributeDeclaration(var6);
  1521.                this.insertDeclaration(var11, (BaseDeclaration)null);
  1522.                var7 = var11;
  1523.             }
  1524.  
  1525.             if (var7 != null) {
  1526.                var7 = (AttributeGroupMember)((AttributeDeclaration)var7).clone();
  1527.                if (this.isSupported("GESTALT_GLOBAL_ATTRS") && ((AttributeDeclaration)var7).isGlobal()) {
  1528.                   ((AttributeDeclaration)var7).setReference(true);
  1529.                }
  1530.  
  1531.                this.insertDeclaration((AttributeDeclaration)((AttributeDeclaration)var7), (BaseDeclaration)null, (AttributeDeclaration.Owner)var1);
  1532.             }
  1533.          }
  1534.  
  1535.          if (var7 == null) {
  1536.             var7 = new AttributeDeclaration(var1, var6);
  1537.             this.insertDeclaration((AttributeDeclaration)var7, (BaseDeclaration)null);
  1538.          }
  1539.  
  1540.          var4.addElement(var7);
  1541.       }
  1542.  
  1543.       Vector var9 = var1.updateAttributes(var4);
  1544.       FilteredEnumerator var10 = new FilteredEnumerator(var9.elements(), Class.forName("com.extensibility.xml.AttributeDeclaration"));
  1545.       Object var12 = null;
  1546.  
  1547.       while(var10.hasMoreElements()) {
  1548.          AttributeDeclaration var13 = (AttributeDeclaration)var10.nextElement();
  1549.          this.schema.removeDeclaration(var13);
  1550.          this.fireRemoveEvent(var13);
  1551.       }
  1552.  
  1553.       if (var1 instanceof InternalPEDeclaration) {
  1554.          ((InternalPEDeclaration)var1).updateValue();
  1555.       }
  1556.  
  1557.    }
  1558.  
  1559.    public void updateContentModel(ContentModelOwner var1, String var2) throws ParserException {
  1560.       var2 = DTDUtilities.convertPEReferences(var2, true).trim();
  1561.       boolean var3 = var2.equals("EMPTY") || var2.equals("ANY");
  1562.       this.schema.updateContentModel(var1, var2, var3);
  1563.    }
  1564.  
  1565.    public URI getNamespace() {
  1566.       return this.schema.getNamespace();
  1567.    }
  1568.  
  1569.    public void setNamespace(URI var1) {
  1570.       URI var2 = this.schema.getNamespace();
  1571.       this.schema.setNamespace(var1);
  1572.       if (var1 == null && var2 != null || var1 != null && !var1.equals(var2)) {
  1573.          this.fireChangedEvent((BaseDeclaration)null);
  1574.       }
  1575.  
  1576.    }
  1577.  
  1578.    public String getSchemaPrefix() {
  1579.       return this.schema.getSchemaPrefix();
  1580.    }
  1581.  
  1582.    public void setSchemaPrefix(String var1) {
  1583.       String var2 = this.schema.getSchemaPrefix();
  1584.       this.schema.setSchemaPrefix(var1);
  1585.       if (var1 == null && var2 != null || var1 != null && !var1.equals(var2)) {
  1586.          this.fireChangedEvent((BaseDeclaration)null);
  1587.       }
  1588.  
  1589.    }
  1590.  
  1591.    public void updatePreferences(URI var1, DocumentPreferences var2) {
  1592.       ProcessingInstruction var3 = this.getInstruction(var1, "XA_DOC_PREFS");
  1593.       if (var3 == null) {
  1594.          var3 = new ProcessingInstruction("XA_DOC_PREFS", ((BaseInfo)var2).toSource());
  1595.          ((BaseDeclaration)var3).setURI(var1);
  1596.          this.insertDeclaration(var3, (BaseDeclaration)null);
  1597.       } else {
  1598.          var3.setInstruction(((BaseInfo)var2).toSource());
  1599.       }
  1600.  
  1601.       this.touch(var1);
  1602.    }
  1603.  
  1604.    protected void updateURI(URI var1, URI var2) {
  1605.       this.schema.updateURI(var1, var2);
  1606.       this.moduleRegistry.updateURI(var1, var2);
  1607.       if (var1.equals(this.focusedURI)) {
  1608.          this.focusedURI = var2;
  1609.       }
  1610.  
  1611.    }
  1612.  
  1613.    public void write(Writer var1) throws IOException {
  1614.       this.write(var1, ((BaseDocument)this).getURI());
  1615.    }
  1616.  
  1617.    public void write(Writer var1, URI var2) throws IOException {
  1618.       this.schema.write(var1, var2);
  1619.    }
  1620.  
  1621.    public boolean doUncheckout(URI var1) {
  1622.       return false;
  1623.    }
  1624.  
  1625.    public boolean doCheckout(URI var1) {
  1626.       URIVersionedAccess var2 = (URIVersionedAccess)var1.getInterface(Class.forName("com.extensibility.plugin.api.URIVersionedAccess"));
  1627.       boolean var3 = var2.checkoutItem() == 0;
  1628.       if (var3) {
  1629.          this.setEditable(var1, true);
  1630.       }
  1631.  
  1632.       return var3;
  1633.    }
  1634.  
  1635.    public boolean doCheckin(URI var1) {
  1636.       return this.save((ActionEvent)null, var1);
  1637.    }
  1638.  
  1639.    protected void cleanupUnsavedChanges() {
  1640.       Vector var1 = this.moduleRegistry.getAllURIs();
  1641.  
  1642.       for(int var2 = 0; var2 < var1.size(); ++var2) {
  1643.          URI var3 = (URI)var1.elementAt(var2);
  1644.          URIVersionedAccess var4 = (URIVersionedAccess)var3.getInterface(Class.forName("com.extensibility.plugin.api.URIVersionedAccess"));
  1645.          if (var4 != null) {
  1646.             var4.uncheckoutItem();
  1647.          }
  1648.       }
  1649.  
  1650.    }
  1651. }
  1652.